NoxBFT使用手册

1. 引言

1.1 编写目的

此文档描述Hyperchain中如何使用NoxBFT共识算法,使软件开发人员能清楚地了解NoxBFT共识,便于Hyperchain的开发工作。

1.2术语

英文 中文 含义
NoxBFT / Hyperchain新型拜占庭共识算法
h otstuff / NoxBFT共识算法的底层共识协议
mempool 交易 内存池 NoxBFT共识算法的交易池
che ckpoint 检查点 Nox BFT共识算法的检查点协议,用于验证执行结果的正确性

2. 配置说明

configuration/<分区名>/ns_dynamic.toml 配置文件中可以选择启用的算法类型为 NoxBFT ,在 configuration/<分区名>/ns_static.toml 配置文件中可以配置NoxBFT算法相关的设置参数

2.1 ns_dynamic.toml

通过更改 consensus.algo 配置项使用NoxBFT共识算法

[consensus]

algo = “NoxBFT” # Support RBFT or NoxBFT

注意:若非首次部署,请查看《线下共识切使用换手册》进行NoxBFT共识算法配置

2.2 ns_static.toml

2.2.1 hotstuff配置项

[consensus.hotstuff]         # hotstuff configurations
batch_time                    = "0.1s"  # Primary generate a proposal if there are pending requests, although batchsize isn't reached yet.
max_block_size                = 500     # max number of one block generated by leader.
proposer_type                 = "rotating_proposer" # proposer switching type, now support:
                                                    # "fixed_proposer"
                                                    # "rotating_proposer"
contiguous_rounds             = 1 # how many rounds can one proposer continue leading in rotating proposer strategy.
checkpoint_cycle              = 10 # how many round to trigger a new checkpoint cycle.
checkpoint_interval           = 100 # how many rounds allowed that do not generate checkpoints
checkpoint_mem_cache_size     = 2 # the maximum checkpoints with blocks can be cached in memory
checkpoint_share_type         = "cross" # the checkpoint sharing type. (default: cross)
                                        # nox (share checkpoints by NoxBFT messages)
                                        # cross (share checkpoints by sending specific messages and broadcast it to all validators)
pacemaker_initialTimeout      = "0.5s" # the base timeout value of Pacemaker.
exponent_base                 = 2 # how much we increase interval every time
max_exponent                  = 3 # maximum time interval which won't exceed max_exponent
enforce_increasing_timestamps = false # keep the timestamp of the block is increasing.
backward_round_limit          = 10 # how many blocks can be between ordered and checkpoint
                                   # decide by checkpoint_mem_cache_size and checkpoint_cycle
  • batch_time:区块打包等待时间,当从mempool中获取交易数目小于 max_block_size 时最多允许等待的时间。(默认值为 0.1s
  • max_block_size:区块打包交易数量,每个区块允许的最大交易数量。(默认值为 500
  • proposer_type:主节点选举模式,目前支持两种类型(默认值为 rotating_proposer )
    • fixed:固定主节点模式(仅有于测试,不建议使用)
    • rotating_proposer:轮换主节点
  • contiguous_rounds:当 proposer_typerotating_proposer 时,每个主节点连续当选的轮数。(默认值为 1
  • checkpoint_cycle:检查点生成周期,每提交执行多少个区块会生成一次检查点。(默认值为 10
  • checkpoint_interval:检查点生成间隔轮数,超过此间隔共识轮数未生成检查点时,会强制触发检查点的生成。(默认值为 100
  • checkpoint_mem_cache_size:当检查点协议触发旧共识数据清理时,允许缓存多少个检查点中的区块(用于帮助落后节点同步,默认值为 2
  • checkpoint_share_type:检查点分享模式,目前支持两种类型。(默认值为 cross
    • cross:采用节点间互相广播的方式分享检查点,建议在共识集群 节点数量较少 时使用
    • nox:采用主节点搜集的方式分享检查点,建议在共识集群 节点数量较多 时使用
  • pacemaker_initialTimeout:每轮共识初始超时时间。(默认值为 0.5s
  • exponent_base:连续超时时的增长指数的基数(超时时间 = 初始超时时间 * 基数 ^ 幂数,默认值为 2 ,即每次连续超时,超时时间为之前的两倍 )
  • max_exponent:连续超时时间增长指数的最大幂数 (最大超时时间 = 初始超时时间 * 基数 * 最大幂数,默认值为 3 ,即最大超时时间为4秒)
  • enforce_increasing_timestamps:是否强制每轮共识提案具有递增的时间戳。(默认值为 false
  • backward_round_limit:允许落后节点最大落后的轮数。(默认值为 10

2.2.2 mempool配置项目

[consensus.hotstuff.mempool]
type               = "fifo" # memory pool mode: solo(no shared),
                            # fifo(shared with first in first out sorting)
                            # priced(shared with tx price sorting)
pool_size          = 50000 # How many txs could the mempool stores in total
commit_cache_size  = 3 # the maximum committed blocks with their transactions can be cached in memory
  • type:交易内存池的类型,目前允许三种类型(默认值*fifo*)
    • solo:不与其他节点分享交易(仅用于测试,不推荐使用)
    • fifo:交易按先入先出顺序打包,支持节点间通过网络分享交易
    • priced:交易按交易GasPrice从高到低排序打包,支持节点间通过网络分享交易
  • pool_size:交易池中最大允许的交易数量,solofifo 类型超过此数量时会拒绝新加入的交易; priced 类型超过此数量时,会剔除价格较低的交易并接收价格较高的新交易。(默认值为 50000 )
  • commit_cache_size:上链交易的缓存,允许缓存多少个区块中的交易。(默认值为 3

3.注意事项

需要注意集群中共识节点采用相同的配置,否则可能因为配置差异而成为拜占庭节点。